思考: SQL Serverで日付型を採用するメリット・デメリット
日付型を使うメリット
日付型を使うデメリット
あまり思いつかない
意図しないデータが格納されて焦る?
意図していないと思っているのは、仕様をよく知らない人(=自分)が悪い
ちゃんと仕様をしらない方が悪いと思いたいが…
何故その型でテーブルを作ったのかと聞きたいこともある
日付型以外を使うメリット
実際に調べたことはないが、こういう説もある
昔のマシンスペック/RDBだと層だったらしい?
今もそう?
日付型以外を使うデメリット
不正な日付が格納できてしまう
20200832
演算が面倒くさい
20201201の一日前は?
単純に1引くと20201200になる…
20201231の一日後は?
単純に1足すと20201232になる…
その月の月末の求め方は?
DBから文字列として値を取得する
ロジック側で日付型に戻す
不正な日付が入るかも…
月末を求める
20201231の一年前は20191231?
一年前は-10000一年後は+10000で算出するパワープレイを見たことがある… code:PowerPlay.java
// 一年前を求めて表示する…らしい
label1 = sampleEntity.getYMD() - 10000;
そもそも本当に1年前になるのか?
レガシーデータにおける奇妙な日付
西暦の下2桁から始まる8桁の識別子でデータを運用していた
不正な日付を特殊ケースとして扱ってしまい、暗黙知となる 00000000をシステム稼働前の初期値として扱うなど
アプリケーション側では大体日付として扱って、最終的にtoString("yyyyMMdd")として格納しがち
参考